/*
    Quaxx - Just another ataxx clone
    Copyright (C) 2010  Manuel Córdoba Ruiz

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <QtGui>

#include "mainwindow.h"
#include "tablero.h"
#include "opcionesdialog.h"

MainWindow::MainWindow()
{
	tablero = new Tablero;
	setCentralWidget(tablero);
	
	setWindowTitle(tr("Quaax"));  // Establezco el titulo de la ventana
	createActions();
	createMenus();
	createStatusBar();
	connect(tablero, SIGNAL(ganador(QString)), this, SLOT(ganar(QString)));  // Conecto la señal ganador del tablero con el slot ganar de la ventana
	tablero->nuevo();  // Creo un nuevo tablero.
	setWindowIcon(QIcon("images/icon.png"));

}

void MainWindow::opciones()
{
	opcionesDialog = new OpcionesDialog(this);  // Creo el dialogo
	opcionesDialog->setColorFicha(1,tablero->getColorFicha(1));  // Establezco en el select el valor correcto
	opcionesDialog->setColorFicha(2,tablero->getColorFicha(2));  // Establezco en el select el valor correcto
	opcionesDialog->setTipoOponente(tablero->getTipoOponente());  // Establezco en el select de oponente el valor
	opcionesDialog->show();  // Muestro el dialogo
	opcionesDialog->activateWindow();  // Activo la ventana
	connect(opcionesDialog, SIGNAL(ColorFichaCambiado(int,int)), tablero, SLOT(setColorFicha(int, int))); // Conecto la señal de color cambiado al metodo del tablero
	connect(opcionesDialog, SIGNAL(TipoOponenteCambiado(int)), tablero, SLOT(setTipoOponente(int))); // Conecto la señal de oponente cambiado al metodo del tablero
}

void MainWindow::nuevo()
{
	int respuesta;
	respuesta=QMessageBox::information(this, "Nueva partida", tr("¿Quiere iniciar una nueva partida?"),"&Si","&No",0,1);
	switch(respuesta){
		case 0:
			tablero->nuevo();
		break;

	}
}

void MainWindow::guardar()
{
	// Muestro un dialogo para elegir un nombre de archivo
	QString fileName = QFileDialog::getSaveFileName(this,
                               tr("Guardar partida"), ".",
                               tr("Partidas de Ataax (*.dat)"));
	if (tablero->guardar(fileName)) {
		statusBar()->showMessage(tr("Partida guardada"),2000);
	}else{
		statusBar()->showMessage(tr("Error al guardar"), 2000);
    }
}

void MainWindow::abrir()
{
	// Muestro un dialogo para seleccionar un archivo
	QString fileName = QFileDialog::getOpenFileName(this,
                                   tr("Abrir partida"), ".",
                                   tr("Partidas de Ataax (*.dat)"));
	if(tablero->abrir(fileName)){
		statusBar()->showMessage(tr("Partida abierta"),2000);
	}else{
		statusBar()->showMessage(tr("Error al abrir"),2000);
	}
}

void MainWindow::about()
{
    QMessageBox::about(this, tr("Acerca de Ataxx"),
            tr("<center><h2>Quaxx 1.0</h2></center>"
               "<p>Programado por:</p>"
               "<p>Manuel C&oacute;rdoba Ruiz &lt;mcordoba@innovabit.com</p>"
               "<p>Universidad de Granada 2007</p>"
               ));
}

void MainWindow::ganar(QString mensaje)
{
	mensaje.prepend("<center><h2>&#161;Ha ganado el jugador ");
	mensaje.append("!</h2></center>");
	int respuesta;
    	respuesta=QMessageBox::information(this, "Fin de la partida", mensaje,"&Salir","&Jugar de nuevo",0,1);

	switch(respuesta){
		case 0:
			close();
		break;

		case 1:
			tablero->nuevo();
		break;
	}

}

void MainWindow::createActions()
{

	// Actions del menu Juego
	action_Nuevo = new QAction(tr("&Nuevo"),this);
	action_Nuevo->setIcon(QIcon("images/new.png"));
	connect(action_Nuevo, SIGNAL(triggered()), this, SLOT(nuevo()));

	action_Abrir = new QAction(tr("&Abrir"),this);
	action_Abrir->setIcon(QIcon("images/open.png"));
	connect(action_Abrir, SIGNAL(triggered()), this, SLOT(abrir()));

	action_Guardar = new QAction(tr("&Guardar"),this);
	action_Guardar->setIcon(QIcon("images/save.png"));
	connect(action_Guardar, SIGNAL(triggered()), this, SLOT(guardar()));

	action_Opciones = new QAction(tr("&Opciones"),this);
	action_Opciones->setIcon(QIcon("images/options.png"));
	connect(action_Opciones, SIGNAL(triggered()), this, SLOT(opciones()));

	action_Salir = new QAction(tr("&Salir"),this);
	action_Salir->setIcon(QIcon("images/exit.png"));
	connect(action_Salir, SIGNAL(triggered()), this, SLOT(close()));

	// Actions del menu Movimientos
	action_Anterior = new QAction(tr("&Anterior"),this);
	action_Anterior->setIcon(QIcon("images/undo.png"));
	connect(action_Anterior, SIGNAL(triggered()), tablero, SLOT(anterior()));

	action_Siguiente = new QAction(tr("&Siguiente"),this);
	action_Siguiente->setIcon(QIcon("images/redo.png"));
	connect(action_Siguiente, SIGNAL(triggered()), tablero, SLOT(siguiente()));

	// Actions del menu Ayuda
	action_AcercaDe = new QAction(tr("&Acerca de.."),this);
	action_AcercaDe->setIcon(QIcon("images/help.png"));
	connect(action_AcercaDe, SIGNAL(triggered()), this, SLOT(about()));

	

}

void MainWindow::createMenus()
{
	// Agregamos los actions al menu Juego
	menu_Juego = menuBar()->addMenu(tr("&Juego"));
	menu_Juego->addAction(action_Nuevo);
	menu_Juego->addAction(action_Abrir);
	menu_Juego->addAction(action_Guardar);
	menu_Juego->addAction(action_Opciones);
	menu_Juego->addAction(action_Salir);

	menu_Movimientos = menuBar()->addMenu(tr("&Movimientos"));
	menu_Movimientos->addAction(action_Anterior);
	menu_Movimientos->addAction(action_Siguiente);

	menu_Ayuda = menuBar()->addMenu(tr("&Ayuda"));
	menu_Ayuda->addAction(action_AcercaDe);

}

void MainWindow::createStatusBar()
{
	// Conecto la señal de cambio de turno del tablero a la señal de mostrar mensaje de la barra de estado.
	connect(tablero,SIGNAL(turnocambiado(QString)),statusBar(),SLOT(showMessage(QString)));


}

